home *** CD-ROM | disk | FTP | other *** search
/ Aminet 7 / Aminet 7 - August 1995.iso / Aminet / comm / net / DialupV3_03.lha / dialup / util.c < prev   
C/C++ Source or Header  |  1994-11-03  |  4KB  |  159 lines

  1. #include "dialup.h"
  2.  
  3. extern BPTR                    mystderr;
  4. extern const UBYTE             *prgname;
  5. extern struct IOExtSer        *serialIOReq;
  6. extern struct timerequest    *timereq;
  7. extern BPTR                    repfile;
  8. extern UBYTE                *rxbuffer;
  9. extern LONG                    arg[];
  10. extern struct argspec        argtab[];
  11.  
  12.  
  13. /* check for second start: */
  14. BOOL
  15. unique(struct MsgPort *serialport)
  16.     {
  17.     Disable();
  18.     if( serialport = FindPort(SERPORTNAME) )
  19.         {
  20.         Signal( serialport->mp_SigTask, SIGBREAKF_CTRL_C );
  21.         Enable();
  22.         DisplayBeep(NULL);
  23.         return(FALSE);
  24.         };
  25.     Enable();
  26.  
  27.     _OK_;
  28.     }
  29.  
  30.  
  31. /* init defaults for parameters: */
  32. void
  33. initDefaultsAndTemplate(UBYTE *wptr)
  34.     {
  35.     enum argnames argcnt = A_CMD;     /* first command */
  36.     while ( 1 )
  37.         {
  38.         wptr += sprintf(wptr, argtab[argcnt].name);
  39.         arg[argcnt] = argtab[argcnt].deflt;
  40.         if ( A_ALL == ++argcnt ) break;
  41.         *wptr++ = ',';
  42.         }
  43.     }
  44.  
  45. #define MAXARGNAMELEN 30
  46. /* build defaults template: */
  47. BOOL
  48. initDefaultsTemplate(UBYTE *wptr, LONG argd[])
  49.     {
  50.     UBYTE argnamebuf[MAXARGNAMELEN];
  51.     enum argnames argcnt = A_CMD;     /* first command */
  52.     while ( 1 )
  53.         {
  54.         UBYTE *sptr;
  55.  
  56.         if ( strlen(argtab[argcnt].name) > MAXARGNAMELEN - 3) return(FALSE);
  57.         strcpy( argnamebuf, argtab[argcnt].name );
  58.         if ( sptr = strchr(argnamebuf, '/' ) )
  59.             { sptr[1] = 'S'; sptr[2] = '\0'; }
  60.         wptr += sprintf(wptr, argnamebuf );
  61.         argd[argcnt] = NULL;
  62.         if ( A_END == ++argcnt ) break;
  63.         *wptr++ = ',';
  64.         };
  65.  
  66.     _OK_;
  67.     }
  68.  
  69. void
  70. showdefaults(LONG argd[])
  71.     {
  72.     enum argnames argcnt;
  73.     BOOL anyopt = FALSE;
  74.  
  75.     for ( argcnt = A_END - 2; argcnt > A_CMD || !anyopt ; argcnt--) if ( argd[argcnt] || argd[A_ALL] )
  76.         {
  77.         UBYTE pnc = 0;
  78.  
  79.         FPrintf(Output(), "%s: ", argtab[argcnt].name);
  80.         if         ( strstr( argtab[argcnt].name, "/N" ) ) FPrintf(Output(), "%d\n", *(LONG *)arg[argcnt] );
  81.         else if ( strstr( argtab[argcnt].name, "/M" ) ) { while (  ((UBYTE **)arg[argcnt])[pnc] ) FPrintf(Output(), "%s ", ((UBYTE **)arg[argcnt])[pnc++]); FPrintf(Output(), "\n"); }
  82.         else if ( strstr( argtab[argcnt].name, "/S" ) ) FPrintf(Output(), "%s\n", arg[argcnt] ? "ON" : "OFF" );
  83.         else                                             FPrintf(Output(), "%s\n", arg[argcnt] ? (UBYTE *)arg[argcnt] : "*NO DEFAULT*" );
  84.         anyopt = TRUE;
  85.         };
  86.     }
  87.  
  88. BOOL
  89. initSerialLine(struct SP *serpara)
  90.     {
  91.     /* setting serial parameters ?*/
  92.     if ( ! arg[A_NSI] )        /* if modem is online it doesn't autodetect baudrate on AT and the parameters should be correct anyway */
  93.         {
  94.         serialIOReq->IOSer.io_Command                        = SDCMD_SETPARAMS;
  95.         serialIOReq->io_SerFlags                            &= ~SERF_PARTY_ON;
  96.         serialIOReq->io_SerFlags                            |= (SERF_RAD_BOOGIE | SERF_XDISABLED);
  97.         if ( serpara->serHWHS ) serialIOReq->io_SerFlags        |= SERF_7WIRE;
  98.         serialIOReq->io_ExtFlags                            = 0;
  99.         serialIOReq->io_Baud                                = serpara->serBaudRate;
  100.         VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL );
  101.         };
  102.  
  103.     /* flush device */
  104.     serialIOReq->IOSer.io_Command  = CMD_FLUSH;
  105.     VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL)
  106.  
  107.     for(;;) /* sink all incomming data to NIL:  */
  108.         {
  109.         serialIOReq->IOSer.io_Command  = SDCMD_QUERY;
  110.         DoIO((struct IORequest *)serialIOReq);
  111.         if( serialIOReq->IOSer.io_Actual == 0 )
  112.     break;
  113.         serialIOReq->IOSer.io_Command  = CMD_READ;
  114.         serialIOReq->IOSer.io_Length   = serialIOReq->IOSer.io_Actual;
  115.         serialIOReq->IOSer.io_Data       = (APTR)rxbuffer;
  116.         VERIFY ( DoIO((struct IORequest *)serialIOReq) == NULL );
  117.         Delay(10);    /* wait for the line to get quiet */
  118.         };
  119.     _OK_
  120.     }
  121.  
  122.  
  123. void
  124. buildMatchStringArray( UBYTE *pattern, UBYTE *buf, UBYTE *msa[] )
  125.     {
  126.     USHORT mcnt;
  127.     UBYTE *spt;
  128.  
  129.     /* I want to modify the string, but the prg should be residentable (pure)! */
  130.     strcpy(buf, pattern);
  131.     /* build match pointer array of string with matches: */
  132.     for (mcnt = 0; mcnt < MAXMATCHSTRING - 1; mcnt++)
  133.         {
  134.         if ( !( spt = strrchr( buf , '|' ) ) ) break;
  135.         *spt = '\0';
  136.         msa[mcnt] = spt + 1;
  137.         };
  138.     msa[mcnt] = buf;
  139.     msa[mcnt + 1] = NULL;
  140.     }
  141.  
  142. UBYTE *
  143. matchString( UBYTE *string, UBYTE *msa[])
  144.     {
  145.     UBYTE *sptr;
  146.     while ( *msa && !stcpm(string, *msa, &sptr) ) msa++;
  147.     return ( *msa ? sptr : NULL );
  148.     }
  149.  
  150.  
  151. UBYTE *
  152. sStrMatch(UBYTE *string, UBYTE *pattern, UBYTE *buf)
  153.     {
  154.     UBYTE *msa[MAXMATCHSTRING];
  155.     buildMatchStringArray(pattern, buf, msa);
  156.     return( matchString( string, msa) );
  157.     }
  158.  
  159.